home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / KEYBOARD.SWG / 0087_Caps.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  2KB  |  84 lines

  1. {
  2.  JA> Does anyone have some code to turn the capslock, numlock and scrolllock
  3.  JA> keys on and off?
  4.  
  5. Yes.
  6.  
  7. >cut here
  8.  
  9. {$X+}{$G+}
  10. Program SmallToggleDemo;
  11. { Written by Andrew Eigus of 2:5100/33, no int 16h, direct memory operations;
  12.   Public Domain; Released for SWAG!!! }
  13.  
  14. uses Crt;
  15.  
  16. const
  17.   { Lock keys (lk) constants }
  18.  
  19.   lkScrollLock = $10; { Scroll Lock toggle key }
  20.   lkNumLock    = $20; { Num Lock toggle key }
  21.   lkCapsLock   = $40; { Caps Lock toggle key }
  22.   lkInsMode    = $80; { Insert toggle key }
  23.  
  24. Function KbdGetFlags : word; near; assembler;
  25. { Returns keyboard status word at 0040:0017 }
  26. Asm
  27.   mov es,Seg0040
  28.   mov ax,es:[0017h]
  29. End; { KbdGetFlags }
  30.  
  31. Function GetLockState(LockKey : byte) : boolean; assembler;
  32. { Returns the status of Scroll, Caps, Num and Insert modes }
  33. Asm
  34.   call KbdGetFlags
  35.   and al,LockKey
  36. End; { GetLockState }
  37.  
  38. Procedure ToggleLockState(LockKey : byte; State : boolean); assembler;
  39. { Toggles Scroll, Caps, Num and Insert modes }
  40. Asm
  41.   cli
  42.   call KbdGetFlags
  43.   or  State,False
  44.   jz  @@1
  45.   or  al,LockKey       { turn state on }
  46.   jmp @@2
  47. @@1:
  48.   test al,LockKey
  49.   jz  @@4
  50.   xor al,LockKey
  51. @@2:
  52.   mov byte ptr es:[0017h],al { set new state }
  53.   cmp LockKey,lkInsMode
  54.   je  @@4                { don't have a LED for Insert :) }
  55.   mov ah,al
  56.   mov dx,60h
  57.   mov al,0EDh
  58.   out dx,al
  59.   mov cx,2000h
  60. @@3:
  61.   loop @@3               { delay ~10ms+ }
  62.   mov al,ah
  63.   shr al,4
  64.   out dx,al              { turn LED on/off }
  65. @@4:
  66.   sti
  67. End; { ToggleLockState }
  68.  
  69. Begin
  70.   repeat
  71.     ToggleLockState(lkNumLock, not GetLockState(lkNumLock));
  72.     Delay(100);
  73.     ToggleLockState(lkCapsLock, not GetLockState(lkCapsLock));
  74.     Delay(100);
  75.     ToggleLockState(lkScrollLock, not GetLockState(lkScrollLock));
  76.     Delay(100)
  77.   until KeyPressed;
  78.   ReadKey;
  79.   ToggleLockState(lkNumLock, False);
  80.   ToggleLockState(lkCapsLock, False);
  81.   ToggleLockState(lkScrollLock, False)
  82. End.
  83.  
  84.